﻿using System;
using System.IO;

//委托demo
namespace DelegateAppl3 {
    class PrintString {
        static FileStream fs;
        static StreamWriter sw;
        // 委托声明
        public delegate void printString(string s);

        // 该方法打印到控制台
        public static void WriteToScreen(string str) {
            Console.WriteLine("The String is: {0}", str);
        }
        // 该方法打印到文件
        public static void WriteToFile(string s) {
            fs = new FileStream("D:\\porject\\message.txt", FileMode.Append, FileAccess.Write);
            sw = new StreamWriter(fs);
            sw.WriteLine(s);
            sw.Flush();
            sw.Close();
            fs.Close();
        }
        // 该方法把委托作为参数，并使用它调用方法
        public static void sendString(printString ps) {
            ps("Hello World");
        }
        static void Main(string[] args) {
            printString ps1 = new printString(WriteToScreen);
            printString ps2 = new printString(WriteToFile);
            //这里的执行流程是：将WriteToScreen方法赋值给委托（ps1），
            //然后调用sendString这个方法将委托(ps1)作为参数传入，然后在sendString方法中调用 printString 这个委托，
            //然后这个委托实际是调用的 WriteToScreen 这个方法；
            sendString(ps1);
            sendString(ps2);
            Console.ReadKey();
        }
    }
}